#define _CRT_SECURE_NO_WARNINGS 1
#include <climits>
#include <iostream>
#include<string>
#include <unordered_map>
#include<vector>
#include<math.h>
using namespace std;
class Solution {
public:
    unordered_map<int, vector<int>>  hash;
    int cnt = INT_MAX;
    vector<int> factor(int x) {
        vector<int> v;
        for (int i = 2; i <= sqrt(x); i++) {
            if (x % i == 0) {
                v.push_back(i);
                v.push_back(x / i);
            }
        }
        return v;
    }
    void dfs(int x, int count, int target, unordered_map<int, vector<int>>& hash) {
        if (x > target) return;
        /*if (count > cnt)return;*/
        if (x == target) {
            cnt = min(count, cnt);
            return;
        }
        if (!hash.count(x)) {
            hash[x] = factor(x);
        }
        auto it = hash[x].rbegin();
        while ( it != hash[x].rend())
        {
            dfs(x + *it, count + 1, target, hash);
            it++;
        }

    }
    int solution(int a, int b)
    {
        dfs(a, 0, b, hash);
        if (cnt == INT_MAX) return -1;
        return cnt;
    }
};
int main() {
    int a, b;
    cin >> a >> b;
    cout << Solution().solution(a, b);
    return 0;
}
//#include <iostream>
//using namespace std;
//
//int main()
//{
//    string tmp;
//    vector<string> v;
//    getline(cin, tmp);
//    auto begin = tmp.begin(), end = tmp.begin();
//    int cnt = 1;
//    while (end!=tmp.end())
//    {
//        if (*end == ' ')
//        {
//            cnt++;
//            v.push_back(tmp.substr(begin - tmp.begin(), end - begin ));
//            if (v.back()[0] == '"')
//            {
//                string tmp = v.back().substr(1, v.back().size() - 2);
//                v.pop_back();
//                v.push_back(tmp);
//            }
//            end++;
//            begin = end;
//        }
//        else if (*end == '"')
//        {
//            end++;
//            while (*end != '"')end++;
//            end++;
//        }
//        else end++;
//    }
//    v.push_back(tmp.substr(begin - tmp.begin(), end - begin + 1));
//    if (v.back()[0] == '"')
//    {
//        string tmp = v.back().substr(1, v.back().size() - 2);
//        v.pop_back();
//        v.push_back(tmp);
//    }
//    cout << cnt<<endl;
//    for (auto& e : v)
//    {
//        cout << e << endl;
//    }
//    return 0;
//}